const app = getApp()
import { get, post } from '../../../utils/request'

Page({
  data: {
    id: '',
    orderDetail: null,
    loading: true,
    userType: 'user' // 用户类型，默认为普通用户，可选值：user(普通用户)、worker(服务人员)
  },

  onLoad(options) {
    // 先检查登录状态
    if (!this.checkLogin()) {
      return;
    }

    // 获取订单ID
    if (options.id) {
      this.setData({
        id: options.id
      });

      // 获取用户类型
      const userInfo = wx.getStorageSync('userInfo');
      const userType = userInfo && userInfo.role === 'provider' ? 'worker' : 'user';
      this.setData({ userType });

      // 获取订单详情
      this.getOrderDetail();
    } else {
      wx.showToast({
        title: '订单不存在',
        icon: 'none'
      });
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
    }
  },

  // 检查是否登录
  checkLogin() {
    const token = wx.getStorageSync('token');
    if (!token) {
      wx.showToast({
        title: '请先登录',
        icon: 'none',
        duration: 1500
      });

      // 跳转到登录页面
      setTimeout(() => {
        wx.navigateTo({
          url: '/pages/login/login'
        });
      }, 1500);
      return false;
    }
    return true;
  },

  // 格式化时间显示
  formatTime(timeString) {
    if (!timeString) return '';

    try {
      // 处理带T和Z的ISO格式时间
      timeString = timeString.replace('T', ' ').replace('Z', '');

      // 判断是否包含毫秒
      if (timeString.includes('.')) {
        timeString = timeString.split('.')[0];
      }

      // 如果包含+号后面的时区信息，去掉
      if (timeString.includes('+')) {
        timeString = timeString.split('+')[0];
      }

      // 分割日期和时间
      const parts = timeString.split(' ');
      if (parts.length === 2) {
        const date = parts[0]; // 2025-03-31
        const time = parts[1].substring(0, 5); // 只取小时和分钟 (11:00)
        return `${date} ${time}`;
      }

      return timeString;
    } catch (error) {
      console.error('时间格式化错误', error);
      return timeString;
    }
  },

  // 获取订单详情
  getOrderDetail() {
    this.setData({ loading: true });

    // 调用获取订单详情接口
    get('/api/orders/get/vo', { id: this.data.id }).then(res => {
      if (res.code === 0 && res.data) {
        // 处理订单详情数据
        const orderData = res.data;
        const orderDetail = {
          id: orderData.id,
          serviceId: orderData.serviceId,
          serviceName: orderData.serviceName,
          serviceImage: orderData.serviceImage || '/assets/images/default.png',
          totalPrice: orderData.totalPrice,
          status: orderData.status,
          statusText: this.getStatusText(orderData.status),
          appointmentTime: this.formatTime(orderData.appointmentTime),
          createTime: this.formatTime(orderData.createTime),
          paymentTime: this.formatTime(orderData.paymentTime),
          address: orderData.addressDetail,
          remark: orderData.remark || '无',
          userId: orderData.userId,
          userName: orderData.userName,
          userPhone: orderData.userPhone || '',
          providerId: orderData.providerId,
          providerName: orderData.providerName || '待分配',
          providerPhone: orderData.providerPhone || ''
        };

        this.setData({
          orderDetail,
          loading: false
        });
      } else {
        this.setData({ loading: false });
        wx.showToast({
          title: res.message || '获取订单详情失败',
          icon: 'none'
        });
        setTimeout(() => {
          wx.navigateBack();
        }, 1500);
      }
    }).catch(err => {
      console.error('获取订单详情失败', err);
      this.setData({ loading: false });
      wx.showToast({
        title: '获取订单详情失败',
        icon: 'none'
      });
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
    });
  },

  // 获取状态文字
  getStatusText(status) {
    switch (status) {
      case 'pending':
        return '待支付';
      case 'paid':
        return '已支付';
      case 'in_progress':
        return '进行中';
      case 'completed':
        return '已完成';
      case 'refunded':
        return '已退款';
      case 'canceled':
        return '已取消';
      default:
        return '未知';
    }
  },

  // 支付订单
  payOrder() {
    wx.showLoading({
      title: '正在处理...',
      mask: true
    });

    // 调用支付订单接口
    post(`/api/orders/pay/${this.data.id}`).then(res => {
      wx.hideLoading();

      if (res.code === 0 && res.data) {
        wx.showToast({
          title: '支付成功',
          icon: 'success'
        });

        // 刷新订单详情
        setTimeout(() => {
          this.getOrderDetail();
        }, 1500);
      } else {
        wx.showToast({
          title: res.message || '支付失败',
          icon: 'none'
        });
      }
    }).catch(err => {
      wx.hideLoading();
      console.error('支付订单失败', err);

      wx.showToast({
        title: '支付失败',
        icon: 'none'
      });
    });
  },

  // 取消订单
  cancelOrder() {
    wx.showModal({
      title: '提示',
      content: '确定要取消订单吗？',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '处理中...',
            mask: true
          });

          // 调用取消订单接口
          post(`/api/orders/cancel/${this.data.id}`).then(res => {
            wx.hideLoading();

            if (res.code === 0 && res.data) {
              wx.showToast({
                title: '取消成功',
                icon: 'success'
              });

              // 刷新订单详情
              setTimeout(() => {
                this.getOrderDetail();
              }, 1500);
            } else {
              wx.showToast({
                title: res.message || '取消失败',
                icon: 'none'
              });
            }
          }).catch(err => {
            wx.hideLoading();
            console.error('取消订单失败', err);

            wx.showToast({
              title: '取消失败',
              icon: 'none'
            });
          });
        }
      }
    });
  },

  // 完成服务（仅服务人员）
  completeService() {
    wx.showModal({
      title: '提示',
      content: '确认已完成服务？',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '处理中...',
            mask: true
          });

          // 调用完成订单接口
          post(`/api/orders/complete/${this.data.id}`).then(res => {
            wx.hideLoading();

            if (res.code === 0 && res.data) {
              wx.showToast({
                title: '操作成功',
                icon: 'success'
              });

              // 刷新订单详情
              setTimeout(() => {
                this.getOrderDetail();
              }, 1500);
            } else {
              wx.showToast({
                title: res.message || '操作失败',
                icon: 'none'
              });
            }
          }).catch(err => {
            wx.hideLoading();
            console.error('完成服务失败', err);

            wx.showToast({
              title: '操作失败',
              icon: 'none'
            });
          });
        }
      }
    });
  },

  // 联系客户（仅服务人员）
  contactCustomer() {
    const phone = this.data.orderDetail.userPhone;
    if (phone) {
      wx.makePhoneCall({
        phoneNumber: phone
      });
    } else {
      wx.showToast({
        title: '电话号码不可用',
        icon: 'none'
      });
    }
  },

  // 删除订单
  deleteOrder() {
    wx.showModal({
      title: '提示',
      content: '确定要删除该订单吗？删除后无法恢复！',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '处理中...',
            mask: true
          });

          // 调用删除订单接口
          post(`/api/orders/delete/${this.data.id}`).then(res => {
            wx.hideLoading();

            if (res.code === 0 && res.data) {
              wx.showToast({
                title: '删除成功',
                icon: 'success'
              });

              // 返回订单列表页
              setTimeout(() => {
                wx.navigateBack();
              }, 1500);
            } else {
              wx.showToast({
                title: res.message || '删除失败',
                icon: 'none'
              });
            }
          }).catch(err => {
            wx.hideLoading();
            console.error('删除订单失败', err);

            wx.showToast({
              title: '删除失败',
              icon: 'none'
            });
          });
        }
      }
    });
  },

  // 返回上一页
  goBack() {
    wx.navigateBack();
  },

  // 联系师傅（用户端）
  contactProvider() {
    const providerId = this.data.orderDetail.providerId;
    if (!providerId) {
      wx.showToast({
        title: '服务人员未分配',
        icon: 'none'
      });
      return;
    }

    // 显示加载中
    wx.showLoading({
      title: '加载中...',
      mask: true
    });

    // 调用获取服务人员信息接口
    wx.request({
      url: `${app.globalData.baseUrl}/api/service-provider/get/vo`,
      method: 'GET',
      header: {
        'Authorization': app.globalData.token
      },
      data: {
        id: providerId
      },
      success: (res) => {
        wx.hideLoading();
        if (res.data.code === 0 && res.data.data) {
          const provider = res.data.data;

          // 格式化评分，保留一位小数
          const rating = provider.rating ? provider.rating.toFixed(1) : '暂无';

          // 显示手机号弹窗
          wx.showModal({
            title: '服务人员联系方式',
            content: `姓名：${provider.realName || '未知'}\n电话：${provider.phone || '未提供'}\n评分：${rating}`,
            confirmText: '拨打电话',
            cancelText: '关闭',
            confirmColor: '#07c160',
            success: (result) => {
              if (result.confirm && provider.phone) {
                wx.makePhoneCall({
                  phoneNumber: provider.phone
                });
              }
            }
          });
        } else {
          wx.showToast({
            title: res.data.message || '获取联系方式失败',
            icon: 'none'
          });
        }
      },
      fail: () => {
        wx.hideLoading();
        wx.showToast({
          title: '网络错误，请重试',
          icon: 'none'
        });
      }
    });
  },

  // 申请退款
  applyRefund() {
    wx.showModal({
      title: '申请退款',
      content: '确定要申请退款吗？',
      success: (res) => {
        if (res.confirm) {
          wx.showLoading({
            title: '处理中...',
            mask: true
          });

          // 调用申请退款接口
          post(`/api/orders/refund/${this.data.id}`).then(res => {
            wx.hideLoading();

            if (res.code === 0 && res.data) {
              wx.showToast({
                title: '申请成功',
                icon: 'success'
              });

              // 刷新订单详情
              setTimeout(() => {
                this.getOrderDetail();
              }, 1500);
            } else {
              wx.showToast({
                title: res.message || '申请失败',
                icon: 'none'
              });
            }
          }).catch(err => {
            wx.hideLoading();
            console.error('申请退款失败', err);

            wx.showToast({
              title: '申请失败',
              icon: 'none'
            });
          });
        }
      }
    });
  },
}) 